package ihm.panel;

import javax.swing.JPanel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

/**
 * Abstract representation of a JTable embedded in a JPanel.
 * Classe abstraite représantant un JPanel contenant une JTable.
 * @author Guillaume Pocas & Jean-François Augé
 */
public abstract class TablePanel extends JPanel implements TableModelListener {
	
	private static final long serialVersionUID = 1L;
	
	private boolean isLocked = false;
	
	/**
	 * Va chercher les données dans la base pour peupler le modèle de la JTable.
	 * @return
	 */
	public abstract Object[][] populateModel();
	
	/**
	 * Met à jour les informations dans la JTable.
	 */
	public abstract void updateTableInfo();
	
	/**
	 * Déclanché quand une valeur dans la vue est changée, va répercuter le changement dans la base de donnée physique.
	 * @param e TableModelEvent
	 */
	public abstract void tableChanged(TableModelEvent e);
	
	/**
	 * Mutex pour bloquer les changements sur le modèle de la JTable.
	 * @return true if the table is not editable.
	 */
	public boolean isLocked() { return isLocked; }
	
	/**
	 * Mutex pour bloquer les changements sur le modèle de la JTable.
	 * @param isLocked boolean
	 */
	public void setLocked(boolean isLocked) { this.isLocked = isLocked; }
	
}
